spark sql map(): 您所在的位置:网站首页 sparksql for循环 spark sql map():

spark sql map():

2023-11-28 15:24| 来源: 网络整理| 查看: 265

需求想计算hive中每个字段的长度 或者想将hive表中每个字段的类型都转化为Double时,怎么办呢?

一种方法可能是for循环 另一种方法是spark sql的map函数可以解决

for循环 val colNames = df.columns var df1 = df for (colName col(f).cast(DoubleType)) df.select(cols: _*).show()

case2: 计算df中字段的长度

val strLen = udf((entity_id:String) => (entity_id.length)) val fe_list = Array("entity_id", "rule") spark.sql("select * from vc.ad_rule_result where day='2020-11-10'") .select(fe_list.map(c=>strLen(col(c))):_*).show(100)

case3: 对指定的列进行加密

def encode(col: String): String = { if (col == null || col == "" || col == "null" || col == "NULL") return "" CryptUtils.checkAndEncryptWithAES(col.trim) } val encodeUdf: UserDefinedFunction = udf(encode _) val encodeColumns = columns.split(",").map(_.trim) val table = sparkSession.table(tableName) val selectedColumns = table.columns.toSeq.map{ c => if(encodeColumns.contains(c)) encodeUdf(table(c)).as(c) else table(c) } val result = table.select(selectedColumns: _*)

case4: 计算指定列的长度 样本数据:

在这里插入图片描述 计算每个列的长度

val strLen = udf((str:String)=>(str.length)) val test_df = spark.sql(s"select * from temp.course") val selectedColumns = test_df.columns.toSeq.map { c=> strLen(col(c)).as(c) } test_df.select(selectedColumns:_*).show()

在这里插入图片描述

计算某一些列的长度

val selectCols = Array("cname", "cno") val strLen = udf((str:String)=>(str.length)) val test_df = spark.sql(s"select * from temp.course") val selectedColumns = test_df.columns.toSeq.map { c=>if(selectCols.contains(c)) strLen(col(c)).as(c) else col(c) } test_df.select(selectedColumns:_*).show()

在这里插入图片描述 另起别名:

val selectCols = Array("cname", "cno") val strLen = udf((str:String)=>(str.length)) val test_df = spark.sql(s"select * from temp.course") val selectedColumns = test_df.columns.toSeq.map { c=>if(selectCols.contains(c)) strLen(col(c)).as(c+"_len") else col(c) } test_df.select(selectedColumns:_*).show()

在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有